
package com.hlkj.pay.service.merchant;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import java.util.List;

import com.hlkj.framework.common.pojo.PageResult;
import com.hlkj.pay.dto.fund.FundAccountQueryDto;
import com.hlkj.pay.dto.fund.MerchantFundPageDto;
import com.hlkj.pay.dto.merchant.fund.MerchantFundAccountDto;
import com.hlkj.pay.enums.CommonEnum;
import com.hlkj.pay.infrastructure.model.merchant.fund.MerchantFundAccountBindDO;
import com.hlkj.pay.infrastructure.model.merchant.fund.MerchantFundAccountDO;

/**
 * @author HlpayTeam
 * @date 2025/01/08 17:38
 */
public interface IMerchantFundAccountService {

    /**
     *
     * @param merchantAccessDto
     */
    Long saveFund(MerchantFundAccountDto merchantAccessDto);

    /**
     * 
     * @param mchChannelCode
     * @return
     */
    List<MerchantFundAccountBindDO> queryAccountBindList(String mchChannelCode);
    /**
     *
     * @param mchChannelCode
     * @return
     */
    List<MerchantFundAccountBindDO> queryAccountBindList(String mchChannelCode, CommonEnum.YES_NO_TYPE status,CommonEnum.YES_NO_TYPE fundProcessType);

    MerchantFundAccountDto queryAccountByMchOrderNo(String mchOrderNo);

    MerchantFundAccountDto queryAccountDetail(Long id);
    /**
     * 
     * @param mchChannelCode
     * @param accountNo
     * @return
     */
    MerchantFundAccountDO queryAccount(String mchChannelCode, String accountNo);

    /**
     * 
     * @param mchChannelCode
     * @param accountNo
     * @return
     */
    MerchantFundAccountBindDO queryAccountBind(String mchChannelCode, String accountNo);

    /**
     * 
     * @param merchantFundAccountBindDO
     */
    void addAccountBind(MerchantFundAccountBindDO merchantFundAccountBindDO);

    /**
     *
     * @param merchantFundAccountBindDO
     */
    void updateAccountBind(MerchantFundAccountBindDO merchantFundAccountBindDO);

    /**
     * 
     * @param id
     * @param yesNoType
     */
    void updateAccountStatus(Long id, CommonEnum.YES_NO_TYPE yesNoType);

    /**
     *
     * @param updateFundAccountDO
     */
    void updateAccount(MerchantFundAccountDO updateFundAccountDO);

    /**
     *
     * @param merchantFundAccountDto
     */
    void updateFundCard(MerchantFundAccountDto merchantFundAccountDto);

    /**
     *
     * @param fundQueryDto
     * @return
     */
    PageResult<MerchantFundPageDto> queryPage(FundAccountQueryDto fundQueryDto);

    /**
     *
     * @param id
     */
    void delAccountBind(Long id);

    void delAccount(Long id);

    /**
     *
     * @param fundQueryDto
     * @return
     */
    List<MerchantFundPageDto> queryList(FundAccountQueryDto fundQueryDto);
}
